package cn.bs.seckill.exception;


import cn.bs.seckill.vo.RespBean;

import cn.bs.seckill.vo.RespBeanEnum;


import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;



//全局异常处理类
//@RestControllerAdvice 可以直接返回ResponseBody
@RestControllerAdvice
public class GlobalExceptionHandler {

    //注入顶级异常
    @ExceptionHandler(Exception.class)
    public RespBean ExceptionHandler(Exception e) {
        //如果触发了异常,那么会把GlobalException创建为
        //Exception,这样系统才知道GlobalException是个异常信息

        if (e instanceof GlobalException) {
            //把异常强转为指定的异常
            GlobalException exception =
                    (GlobalException) e;
            //返回指定的错误信息
            return
                    RespBean.error(exception.getRespBeanEnum());
        }

        //如果触发了绑定异常,就创建绑定异常(这个是303提供的异常)
        else if (e instanceof BindException) {
            //把异常强转为指定的异常
            BindException exception =
                    (BindException) e;

            //抛出指定的错误信息
            RespBean error =
                    RespBean.error(RespBeanEnum.LOGIN_ERRORID);
            //设置自己想展示的信息getAllErrors().get(0)意思是展示第一个异常
            error.setMessage("账号格式不正确:"+exception.getBindingResult()
                    .getAllErrors().get(0).getDefaultMessage());

            //返回指定的错误信息
            return error;

        }
            return RespBean.error(RespBeanEnum.ERROR);

    }

}
